package com.erbao.dp.singleton;

/**
 * @author CaoBaoYin
 * @since 21/8/22 09:27
 */
public class Manager06 {
    /*java汇编优化，会有语句重排，需要加volatile，使其线程间可见，防止指令重排
    * 不优化成本地代码, 也不用加volatile*/
    private static volatile Manager06 manager06;

    private Manager06() {
    }

    public static synchronized Manager06 getInstance(){
        if (manager06 == null) {
            // 线程安全，双重检查
            synchronized (Manager06.class) {
                if (manager06 == null) {
                    /*指令重排，这一句可能会被汇编成三句
                    * 三句可能还不是顺序执行(指令重排)，可能会导致双重检查的第一重检查做出错误判断
                    * 这个bug概率极低。属性加volatile关键字可避免*/
                    manager06 = new Manager06();
                }
            }
        }
        return manager06;
    }
}
